{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "E:\\Program Files (x86)\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:4: DeprecationWarning: numpy.core.umath_tests is an internal NumPy module and should not be imported. It will be removed in a future NumPy release.\n",
      "  after removing the cwd from sys.path.\n"
     ]
    }
   ],
   "source": [
    "# -*- coding: UTF-8 -*-\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import numpy.core.umath_tests\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import seaborn as sns\n",
    "sns.set(style=\"whitegrid\")\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import learning_curve\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.ensemble import RandomForestRegressor\n",
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.metrics import mean_squared_error"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "df1 = pd.read_csv('data/cleaned.csv')\n",
    "df1.sort_values(\"User_ID\",inplace=True)\n",
    "df1=df1.reset_index(drop=True)\n",
    "df1.drop(['Product_ID','Product_Category_1','Product_Category_2','Product_Category_3'], axis=1,inplace=True)\n",
    "tmp_df1 = df1[['User_ID','Purchase']]\n",
    "tmp_df2 = df1[['User_ID','Gender','Age','Occupation','City_Category','Stay_In_Current_City_Years','Marital_Status']]\n",
    "\n",
    "tmp_df = tmp_df1.groupby('User_ID').sum()\n",
    "tmp_df2=tmp_df2.drop_duplicates(['User_ID'])\n",
    "tmp_df2.sort_values(\"User_ID\",inplace=True)\n",
    "tmp_df2=tmp_df2.reset_index(drop=True)\n",
    "\n",
    "tmp_df=tmp_df.reset_index(drop=True)\n",
    "df = pd.concat([tmp_df2,tmp_df['Purchase']],axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "le_U_ID = LabelEncoder()\n",
    "df['User_ID'] = le_U_ID.fit_transform(df['User_ID'])\n",
    "le_P_ID = LabelEncoder()\n",
    "df['Gender'] = np.where(df['Gender']=='M',1,0) # Female: 0, Male: 1\n",
    "df_Age = pd.get_dummies(df.Age)\n",
    "df_CC = pd.get_dummies(df.City_Category)\n",
    "df_SIC = pd.get_dummies(df.Stay_In_Current_City_Years)\n",
    "df_encoded = pd.concat([df,df_Age,df_CC,df_SIC],axis=1)\n",
    "df_encoded.drop(['Age','City_Category','Stay_In_Current_City_Years'],axis=1,inplace=True)\n",
    "df_ocup = pd.get_dummies(df.Occupation)\n",
    "df_encoded = pd.concat([df_encoded,df_ocup],axis=1)\n",
    "df_encoded.drop(['Occupation'],axis=1,inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_frac = df_encoded.sample(frac=0.02,random_state=100)\n",
    "X = df_frac.drop(['Purchase','User_ID'], axis=1)\n",
    "y = df_frac['Purchase']\n",
    "X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "train_sizes, train_scores, valid_scores = learning_curve(LinearRegression(), X_train, y_train, cv=10, scoring='neg_mean_squared_error')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x27819140d30>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "train_scores = (-1*train_scores)**0.5\n",
    "valid_scores = (-1*valid_scores)**0.5\n",
    "train_scores_mean = np.mean(train_scores, axis=1)\n",
    "train_scores_std = np.std(train_scores, axis=1)\n",
    "valid_scores_mean = np.mean(valid_scores, axis=1)\n",
    "valid_scores_std = np.std(valid_scores, axis=1)\n",
    "\n",
    "plt.figure()\n",
    "plt.plot(train_sizes,valid_scores_mean,label='valid')\n",
    "plt.plot(train_sizes,train_scores_mean,label='train')\n",
    "plt.fill_between(train_sizes, train_scores_mean - train_scores_std, train_scores_mean + train_scores_std, alpha=0.3,color=\"g\")\n",
    "plt.fill_between(train_sizes, valid_scores_mean - valid_scores_std,valid_scores_mean + valid_scores_std, alpha=0.3, color=\"b\")\n",
    "plt.xlabel('Number of samples')\n",
    "plt.ylabel('RMSE')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test set RMSE: 681764.032\n"
     ]
    }
   ],
   "source": [
    "linreg = LinearRegression()\n",
    "linreg.fit(X_train,y_train)\n",
    "y_predicted = linreg.predict(X_test)\n",
    "print('Test set RMSE: {:.3f}'.format(mean_squared_error(y_test,y_predicted)**0.5))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
